" path [string]: xenstore path\n" \
"\n" \
"Returns: [string] data read.\n" \
+ " None if key doesn't exist.\n" \
"Raises RuntimeError on error.\n" \
"\n"
xsval = xs_read(xh, path, &xsval_n);
Py_END_ALLOW_THREADS
if (!xsval) {
- PyErr_SetFromErrno(PyExc_RuntimeError);
+ if (errno == ENOENT) {
+ Py_INCREF(Py_None);
+ val = Py_None;
+ } else
+ PyErr_SetFromErrno(PyExc_RuntimeError);
goto exit;
}
val = PyString_FromStringAndSize(xsval, xsval_n);
" path [string]: path to list.\n" \
"\n" \
"Returns: [string array] list of subdirectory names.\n" \
+ " None if key doesn't exist.\n" \
"Raises RuntimeError on error.\n" \
"\n"
xsval = xs_directory(xh, path, &xsval_n);
Py_END_ALLOW_THREADS
if (!xsval) {
- PyErr_SetFromErrno(PyExc_RuntimeError);
- goto exit;
+ if (errno == ENOENT) {
+ Py_INCREF(Py_None);
+ val = Py_None;
+ } else
+ PyErr_SetFromErrno(PyExc_RuntimeError);
+ goto exit;
}
val = PyList_New(xsval_n);
for (i = 0; i < xsval_n; i++)
PyList_SetItem(val, i, PyString_FromString(xsval[i]));
+ free(xsval);
exit:
return val;
}